package controller;

import pojo.Save;
import view.BankSystemMenu;

import java.util.HashMap;
import java.util.Scanner;

public class BankSystem {
    HashMap<String, Save> bankdb;//类型限制
    //添加构造函数Alt+Insert
    Scanner input;

    public BankSystem() {//构造函数
        bankdb = new HashMap<>();
        input = new Scanner(System.in);
    }

    public void runBankSystem() throws Exception {
        String flags = "N";
        do {
            BankSystemMenu.showMenu();
            String unserInput = input.next();
            switch (unserInput) {
                case "1" -> {
                    createAccount();
                }
                case "2" -> {
                    deleteAccount();
                }
                case "3" -> {
                    saveMoney();
                }
                case "4" -> {
                    getMoney();
                }
                case "5" -> {
                    changemoney();
                }
                case "6" -> {
                    showBalance();
                }
                case "7" -> {
                    exit();
                }
                default -> {
                    System.out.println("您输入有误！请重试！");
                }
            }
            System.out.println("是否继续操作本系统？（Y/N)");
            flags = input.next();
            BankSystemMenu.clearScreen();//清屏
        } while (flags.equalsIgnoreCase("y"));
        System.out.println("欢迎下次再来！！");

    }

    //开户
    public void createAccount() {
        System.out.println("正在创建账户...");
        System.out.print("请输入用户名：");
        String name = input.next();
        System.out.print("请输入密码：");
        String pwd = input.next();
        System.out.println("请输入性别：");
        String gender = input.next();
        Save save = new Save();
        String accountid = "6226" + (int) (1000 + (Math.random() * 9000));
        System.out.println("已为您生成一个专属卡号：" + accountid);
        save.setAccountid(accountid);
        save.setName(name);
        save.setPwd(pwd);
        save.setGender(gender);
        bankdb.put(accountid, save);
        System.out.println("您已经开户完成");
        System.out.println("您的开户信息：" + bankdb);
    }

    //存款
    public void saveMoney() throws Exception {
        boolean iscontinue=false;
        int count=3;
        System.out.println("正在执行存钱功能...");
        System.out.println("-----------------------");
        System.out.println("请您输入您的银行账号：");
        String account=input.next();
        if(bankdb.containsKey(account)){
            Save save=bankdb.get(account);
            do{
                System.out.println("请您输入您的密码：");
                String pwd=input.next();
                if(pwd.equals(save.getPwd())){
                    System.out.println("请输入存款金额：");
                    double money=input.nextDouble();
                    save.setMoney(money+save.getMoney());
                    bankdb.put(account,save);
                    System.out.println("存款成功！");
                    System.err.printf("您的卡号：%s，您的姓名：%s，您的余额：%f\n",save.getAccountid(),save.getName(),save.getMoney());
                    iscontinue=false;
                }else{
                    //可以添加还有两次机会
                    count--;
                    if (count==0){
                        System.out.println("您的密码次数已用完，即将退出查询功能");
                        Thread.sleep(1000);
                        return;
                    }
                    System.out.println("您的密码输入有误，还剩下"+count+"次机会，请重试！");
                    iscontinue=true;
                }
            }while (iscontinue);
        }else {
            System.out.println("您的银行号输入有误！");
            //可以重复几次
        }
    }

    //取款
    public void getMoney() {
    }

    public void changemoney() {
    }

    public void showBalance() throws Exception {
        boolean iscontinue=false;
        int count=3;
        System.out.println("正在查询余额...");
        System.out.println("--------------------");
        System.out.println("请输入您的银行账号：");
        String account=input.next();
        if (bankdb.containsKey(account)){
            Save save=bankdb.get(account);
            do {
                System.out.println("请输入您的密码：");
                String pwd=input.next();
                if (pwd.equals(save.getPwd())){
                    System.out.println("正在查询账户信息，请稍后...");
                    Thread.sleep(1000);
                    System.err.printf("您的卡号：%s，您的姓名：%s，您的余额：%f\n",save.getAccountid(),save.getName(),save.getMoney());
                    iscontinue=false;
                }else{
                    count--;
                    if (count==0){
                        System.out.println("您的密码次数已用完，即将退出查询功能");
                        Thread.sleep(1000);
                        return;
                    }
                    System.out.println("您的密码输入有误，还剩下"+count+"次机会，请重试！");
                    iscontinue=true;
                }
            }while (iscontinue);
        }else {
            System.out.println("您的银行号输入有误！");
            //可以重复几次
        }
    }
    //销户
    public void deleteAccount() throws Exception {
        boolean iscontinue=false;
        int count=3;
        System.out.println("正在销户中...");
        System.out.println("--------------------");
        System.out.println("请输入您的银行卡号：");
        String account=input.next();
        if(bankdb.containsKey(account)) {
            Save save = bankdb.get(account);
            do {
                System.out.print("请输入您的密码：");
                String pwd = input.next();
                if (pwd.equals(save.getPwd())) {
                    System.out.println("正在销户，请稍后...");
                    Thread.sleep(1000);
                    bankdb.remove(account);
                    System.out.println("销户完成");
                    iscontinue = false;
                } else {
                    count--;
                    if (count == 0) {
                        System.out.println("您的密码次数已用完，即将推出销户功能");
                        Thread.sleep(1000);
                        return;
                    }
                    System.out.println("您输入的密码有误，还剩下" + count + "次机会，请重试！");
                    iscontinue = true;
                }
            }//containsKey：包含
            while (iscontinue);
        }
        else {
            System.out.println("您的银行卡输入有误！");
        }
    }

    public void exit() {
        System.out.print("是否真的要退出系统？(Y/N)");
        String userInput=input.next();
        if(userInput.equalsIgnoreCase("y")){
            System.exit(0);
        }
    }
}
